home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / Softshoe / Lisa's Mac Parts / Clipboard / Clipboard.cp < prev    next >
Text File  |  2000-06-23  |  1KB  |  94 lines

  1. // Clipboard.cp
  2.  
  3. #ifndef Clipboard_h
  4. #include "Clipboard.h"
  5. #endif
  6. #ifndef ScrapWriter_h
  7. #include "ScrapWriter.h"
  8. #endif
  9. #ifndef ScrapReader_h
  10. #include "ScrapReader.h"
  11. #endif
  12.  
  13. Clipboard *Clipboard::unexported = 0;
  14.  
  15. Clipboard::Clipboard()
  16.   : validLink( this )
  17.   {
  18.     // Make sure the valid list is constructed first:
  19.         ValidList();
  20.   }
  21.  
  22. Clipboard::~Clipboard()
  23.   {
  24.     Assert( unexported != this );
  25.   }
  26.  
  27. ListOf< Clipboard >& Clipboard::ValidList()
  28.   {
  29.     static ListOf< Clipboard > list;
  30.     return list;
  31.   }
  32.  
  33. void Clipboard::MarkValid()
  34.   {
  35.     ValidList().Add( validLink, afterEnd );
  36.   }
  37.  
  38. void Clipboard::Validate()
  39.   {
  40.     if ( Valid() )
  41.         return;
  42.     
  43.     Import( ScrapReader() );
  44.     MarkValid();
  45.   }
  46.  
  47. void Clipboard::Invalidate()
  48.   {
  49.     if ( unexported == this )
  50.         unexported = 0;
  51.     
  52.     if ( Valid() )
  53.         ValidList().Remove( validLink );
  54.         
  55.     Clear();
  56.   }
  57.  
  58. void Clipboard::Flush() const
  59.   {
  60.     if ( unexported == this )
  61.       {
  62.         ScrapWriter writer;
  63.         Export( writer );
  64.         writer.Approve();
  65.         unexported = 0;
  66.       }
  67.   }
  68.  
  69. void Clipboard::Changed()
  70.   {
  71.     InvalidateAll();
  72.     MarkValid();
  73.     unexported = this;
  74.   }
  75.  
  76. void Clipboard::InvalidateAll()
  77.   {
  78.     unexported = 0;
  79.     ListOf< Clipboard >& valid( ValidList() );
  80.     
  81.     while ( !valid.IsEmpty() )
  82.       {
  83.         Clipboard *clip = *valid.First();
  84.         valid.Remove( clip->validLink );
  85.         clip->Clear();
  86.       }
  87.   }
  88.  
  89. void Clipboard::FlushAll()
  90.   {
  91.     if ( unexported != 0 )
  92.         unexported->Flush();
  93.   }
  94.